package com.six.biz;

import java.util.List;

import org.springframework.transaction.annotation.Transactional;

import com.six.vo.Bill;
import com.six.vo.BillDetail;
import com.six.vo.Customer;
import com.six.vo.User;


/**
 * IPutinStorageManageBiz 入库管理
 * 
 */
//@Transactional(propagation=Propagation.REQUIRED)
public interface IPutinStorageManageBiz {
	/**
	 * 更新业务单
	 * 
	 */
	public void updateBill(Bill bill);
	/**
	 * 入库验货结束，将业务单状态置为 4 IOS 验货完成 -
	 * 
	 */
	public void examineGoodsOver(String billId)throws Exception;
	/**
	 * 删除业务单明细
	 * 
	 */
	public void deleteBillDetail(String billDetailId) throws Exception;
	/**
	 * 办理入库,保存客户货物大致信息，将业务单状态置为【入库办理】状态 3,并等待验货装盘,
	 * 发消息到手持机，通知开始验货
	 * 事务设置：在默认接口声明事务外，本方法再声明
	 * @Transactional(rollbackFor={Exception.class})，意为：当有 Exception 类型异常抛出时候，本
	 * 方法事务回滚
	 */
	@Transactional(rollbackFor={Exception.class})
	public Bill transactPutinStorage(String cid,String billFeeTruckage,String billFeeStore,String
	billFeeOther,String userid)throws Exception;
	/**
	 * 货物入库，当所有的活动状态（0）入库明细都完成入库的时候，这时将入库单的状态置为
	 * 入库完成（6）状态，货物入库成功后，由短信平台发送成功消息给客户
	 * 事务设置：在默认接口声明事务外，本方法再声明
	 * @Transactional(rollbackFor={SMSException.class})，本方法发送 SMSException 类型异常时，
	 * 事务启动回滚机制
	 * 
	 */
	public void goodsPutInStorage(String billDetailId,String sid,String tid,String storeAdmId );
//	@Transactional(rollbackFor={SMSException.class})
//	public void goodsPutInStorage(String billDetailId,String sid,String tid,String storeAdmId ) throws
//	SMSException;
	/**
	 * 验货装盘
	 * 
	 */
	public BillDetail examineGoodsForTray(String billid,String goodsNum,String tid,String
	goodsName,String detailsGoodsSpec,String affirmantId);
//	public BillDetail examineGoodsForTray(String billid,String goodsNum,String tid,String
//	goodsName,String detailsGoodsSpec,String affirmantId) throws SMSException;
	/**
	 * 入库结算
	 * 
	 */
	public void settlementPutInStorage(String billId,Double billFeeTruckage,Double
	billFeeOther,Double billPayable,Double billPaid)throws Exception;
	/**
	 * 业务单明细更新管理，可用于入库出库单管理
	 * 
	 */
	public void billDetailManageUpdate(String billDetailId,Integer detailsGoodsNum,Double
	detailsGoodsSpec ,String note ,Integer detailsIsDel);
	/**
	 * 查询指定条件下的业务单列表
	 * 
	 */
	@Transactional(readOnly=true)
	public List<Bill> findBillList(String billState);
	/**
	 * 验货结束
	 * 
	 */
	public void examineGoods(String billId);
//	public void examineGoods(String billId) throws SMSException;
	/**
	 * 入库办理-过户业务办理时使用
	 * 
	 */
	public Bill transferPutinStore(Customer c,String billFeeTruckage,String billFeeStore,String
	billFeeOther,User user,Bill bill);

}
